#define xxx 5

/*
 * czujnik temperatury w trybie pojedynczej konwersji:
 * komenda: start single conversion
 * czekanie 1 sekundy na zakonczenie konwersji
 * pobranie wyniku konwersji
 *
 * przykład implementacji:
 *
 * if(minela sekunda)
 *   if(odswiezyc temperature)
 *     start conversion;
 *     odczytaj_temperature = 1;
 *   else if(odczytaj_temperature)
 *     teraz odczytaj temperature;
 *
 * lub ze switch:case
 *
 * switch(STATUS & TEMPERATURA)
 *   case START_CONVERSION: start; STATUS |= READ_TEMPERATURE; break;
 *   case READ_TEMPERATURE: read; STATUS &= ~READ_TEMPERATURE; break;
 */

struct Akumulator aku[4];
struct Akumulator *wskazywany;
wskazywany = aku; // wskazywany == AkuOnFocus :-)
wskazywany = wskazywany->next; //dodać pole w structurze: next
// czy takie uzywanie wskaznika bedzie lepsze od: aku[wybrany] ?

if (sekunda)
{
  sekunda=0;
  
  //...
  
  if(time == TEMPERATURA)
  {
    time = 0;
    startConversion();
    IsConversion = TRUE;
  }
  else if(IsConversion)
  {
    IsConversion = FALSE;
    getTemperature();
  }
  
  
}


// typedef i stałe z duzej
typedef unsigned char UCHAR;

UCHAR ucFunkcja();
// dodatkowo moze byc przedrostek do funkcji:
UCHAR ADC_ucRead(); // prefix pomaga okreslic w jakim pliku *h jest funkcja
VOID ADC_vWrite();
UCHAR ucZmienna, aucBufor[2];  
// gdy zdecyduje sie zmienic na UINT to wszystkie 
// zmienne beda sugerowaly ze to jest UCHAR


równosc testowac do FALSE, nie do TRUE:
ok: if(bEin != FALSE)
ok: if(bEin)
no: if(bEin == TRUE)


extern - deklarowac w naglowkach
static - dawac jesli zmienna tylko w tym pliku

wspolny bufor miedzy stanami do wspolnej komunikacji



FastTimerIsr -> SetFastTimer() -> Flag++; // powiekszanie o 1 a nie =1 bo moze być sytuacja ze zgłoszony bedzie killka razy zanim to odczytamy
// Fast zapala flagę, a zwykły sprawdza czy jest odpalona:

Timer(500ms) -> while(Flag){ MalodokladnyTimer--; Flag--; ... } SetTimer();
//dokładny Timer (bazujacy na przerwaniach) odlicza 1s a malodokladny sprawdza co 500ms czy już tamten doliczyl do 1s. Maly moze sie rozjechac bo dziala w wysokiej aplikacji

globalne zmienne grupować w strukturę bo łatwiej pobrać wtedy adres zmiennych: jeden adres struktury + przesuniecie


switch(eState)

case INIT_ADC:
  next = ADC;
 case INIT_TIMER:
 ...
 case ADC:
 ...
 //najpierw same stany z INIT potem zwykłe, lub najpierw INIT bez break i zanim ten normalny z break (automatyczne przejscie)